/**
 * teste si le code est celui d'une touche de controle
 *
 */

function isControlKey(code)
{
	switch(code) {
		case 8: // Backspace
			return true;
		case 36: // Home
			return true;
		case 35: // End
			return true;
		case 37: // Left
			return true;
		case 38: // Up
			return true;
		case 39: // Right
			return true;
		case 40: // Down
			return true;
		case 46: // Delete
			return true;
		case 9: // tab
			return true;
		default:
			return false;
	}
}

/**
 * teste si le code est celui d'une touche du pavé numérique
 *
 */
 
function isNumeric(code)
{
	switch(code) {
		case 96: // 0 and numpad 0
			return true;
		case 97: // 1 and numpad 1
			return true;
		case 98: // 2 and numpad 2
			return true;
		case 99: // 3 and numpad 3
			return true;
		case 100: // 4 and numpad 4
			return true;
		case 101: // 5 and numpad 5
			return true;
		case 102: // 6 and numpad 6
			return true;
		case 103: // 7 and numpad 7
			return true;
		case 104: // 8 and numpad 8
			return true;
		case 105: // 9 and numpad 9
			return true;
		default:
			return false;
	}
}

/**
 * applique un mask de saisie numérique au champ referencé par refobj
 * et empeche de taper uen valeur plusque length
 *
 */

function applyNumbersMask(refobj, length) 
{
	// passage d'un reference length à l'objet testé
	// js hack, pas possible d'accée au length passé en parametere dans le context onkeydown 
	refobj.length = length;
	
	refobj.onkeydown = function(e) 
	{
		var element;
		
		// récupération d'evenement et d'element source
		if(!e) e = window.event;
		if (e.target) element = e.target;
		else if (e.srcElement) element = e.srcElement;

		var keynum;
		var keychar;
		var numcheck;
	
		// cas de ie	
		if(window.event) {
			keynum = e.keyCode;
	  	}
		// netscape, firefox ...
		else {
			keynum = e.which;
	  	}
		
		// ok, touche de controle
		if(isControlKey(keynum)) {
			return true;
		}
	
		// pas plus que length
		if(element.value.length >= this.length) {
				return false;
		}
	
		// ok, touche pavé numéric
		if(isNumeric(keynum)) {
			return true;
		}
	
		//console.info(e.shiftKey);
	
		// ok, touche numeros
		if((e.shiftKey) && (e.keyCode >= 48 && e.keyCode <= 57)) {
			return true;
		}	

		// ko, autres ...
		return false;
	}

}

